package com.qn.example.controller;

import com.qn.example.pojo.Employee;
import com.qn.example.pojo.Page;
import com.qn.example.pojo.R;
import com.qn.example.service.loginService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

/**
 * 员工控制层
 */

@RestController
@Slf4j
@RequestMapping("/employee")
@CrossOrigin
public class EmployeeController {

    @Resource
    private loginService employeeService;

    /**
     * 作用：用户登录
     * @param employee  用户提交username与password过来，封装到该对象中
     * @return
     */
    @PostMapping("/login")
    public R login(@RequestBody Employee employee, HttpSession session){
        log.info("EmployeeController"+employeeService);
        //1. 调用service的登录方法，返回一个R对象
        R<Employee> result = employeeService.login(employee);

        //2. 判断是否登录成功，登录成功需要在session中做一个登录成功标记
        if(result.getCode()==1){
            session.setAttribute("user",result.getData().getId());
        }
        //3. 返回给前端
        return result;

    }

    /**
     * 作用： 用户退出
     * 用户退出有两种方案：
     *      1. 从session中清除登录成功标记    session.removeAttribute("user");
     *      2. 直接删除session。   session.invalidate();   建议，因为删除session可以释放内存
     *
     */

    @PostMapping("/logout")
    public R logout(HttpSession session){
        //直接销毁session
        session.invalidate();
        return R.success("退出登录");
    }

    /**
     * 新增用户
     */
    @PostMapping
    public R save(@RequestBody Employee employee, HttpSession session) {
        //获取当前登录的用户id
        Long uId = (Long) session.getAttribute("user");
        //添加创建用户
        employee.setCreateUser(uId);
        employee.setUpdateUser(uId);


//        //2:如果不存在则直接新增
//        employeeService.save(employee);

        //调用service层新增数据的方法
        //异常处理方式1：单独在controller层处理每一个具体异常（太麻烦）
        try {
            employeeService.save(employee);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error(employee.getUsername() + "已经存在！");
        }

        //将R对象返回给页面
        return R.success("添加成功");
    }

    /**
     * 分页
     */
    @GetMapping("/page")
    public R page(@RequestParam(value = "page",defaultValue = "1") Integer page, @RequestParam(value = "pageSize",defaultValue = "5") Integer pageSize,String name){
        //调用业务层的获取每一页对象的方法
        Page<Employee> pageBean = employeeService.findByPage(page,pageSize,name);
        return  R.success(pageBean);
    }

    /**
     * 修改员工信息
     */

    @PutMapping
    public R  updateEmp(@RequestBody Employee employee,HttpSession session){
        //补全修改人
        //1.先从session中取出当前登录的用户
        Long empId = (Long) session.getAttribute("employee");
        //2. 补全员工的创建人与修改人
        employee.setUpdateUser(empId);
        employeeService.updateEmp(employee);
        return R.success("修改成功");
    }


    /**
     * 作用：根据id查询员工的信息
     */
    @GetMapping("/{id}")
    public R  findById(@PathVariable  Long id){
        Employee employee =  employeeService.findById(id);
        return R.success(employee);
    }


}
